import { Response, Request } from 'express'
import { Dict, District, JavaValidator } from '../../src/typography/interface/types/global-data'

const dictList: Dict[] = [
  { type: 'YN', value: 'Y', label: '是' },
  { type: 'YN', value: 'N', label: '否' },
  { type: 'ED', value: 'E', label: '启用' },
  { type: 'ED', value: 'D', label: '停用' },
  { type: 'GENDER', value: 'M', label: '男' },
  { type: 'GENDER', value: 'F', label: '女' },
  { type: 'NATIONALITY', value: '001', label: '中国' },
  { type: 'NATIONALITY', value: '002', label: '中国澳门' },
  { type: 'NATIONALITY', value: '003', label: '中国香港' },
  { type: 'NATIONALITY', value: '004', label: '中国台湾' },
  { type: 'NATIONALITY', value: '005', label: '美国' },
  { type: 'ID_TYPE', value: '01', label: '居民身份证' },
  { type: 'ID_TYPE', value: '02', label: '中国护照' },
  { type: 'ID_TYPE', value: '03', label: '港澳居民来往内地通行证' },
  { type: 'ID_TYPE', value: '04', label: '港澳居民居住证' },
  { type: 'ID_TYPE', value: '05', label: '台湾居民来往内地通行证' },
  { type: 'ID_TYPE', value: '06', label: '台湾居民居住证' },
  { type: 'ID_TYPE', value: '07', label: '外国护照' },
  { type: 'ID_TYPE', value: '08', label: '外国人永久居留身份证' },
  { type: 'ID_TYPE', value: '09', label: '外国人工作许可证（A类）' },
  { type: 'ID_TYPE', value: '10', label: '外国人工作许可证（B类）' },
  { type: 'ID_TYPE', value: '11', label: '外国人工作许可证（C类）' },
  { type: 'ID_TYPE', value: '12', label: '其他个人证件' },
  { type: 'EDUCATION', value: '01', label: '大学专科' },
  { type: 'EDUCATION', value: '02', label: '大学本科' },
  { type: 'EDUCATION', value: '03', label: '硕士研究生' },
  { type: 'EDUCATION', value: '04', label: '博士研究生' },
  { type: 'EDUCATION', value: '05', label: '其他' },
  { type: 'OPERATE_CODE', value: '01', label: '提交' },
  { type: 'OPERATE_CODE', value: '02', label: '打回' },
  { type: 'OPERATE_CODE', value: '03', label: '确认' },
  { type: 'OPERATE_CODE', value: '04', label: '质疑' },
  { type: 'OPERATE_CODE', value: '05', label: '调整' },
  { type: 'OPERATE_CODE', value: '06', label: '不调' },
  { type: 'OPERATE_CODE', value: '07', label: '发放' },
  { type: 'E8E_E_TYPE', value: '01', label: '雇主企业' },
  { type: 'E8E_E_TYPE', value: '02', label: '代理机构' },
  { type: 'S3F_S_STATUS', value: '1', label: '正常' },
  { type: 'S3F_S_STATUS', value: '2', label: '非正常' },
  { type: 'S3F_S_DUTY', value: '1', label: '高层' },
  { type: 'S3F_S_DUTY', value: '2', label: '普通' },
  { type: 'S3F_S_VERIFY_STATUS', value: '1', label: '验证中' },
  { type: 'S3F_S_VERIFY_STATUS', value: '2', label: '验证不通过' },
  { type: 'S3F_S_VERIFY_STATUS', value: '3', label: '验证成功' },
  { type: 'S3F_S_VERIFY_STATUS', value: '4', label: '暂不验证' },
  { type: 'S3F_S_RECORD_STATUS', value: '1', label: '待报送' },
  { type: 'S3F_S_RECORD_STATUS', value: '2', label: '报送成功' },
  { type: 'S3F_S_RECORD_STATUS', value: '3', label: '待反馈' },
  { type: 'S4Y_S_TYPE', value: '01', label: '月薪' },
  { type: 'S4Y_S_TYPE', value: '02', label: '年终奖' },
  { type: 'S4Y_S_PAY_TYPE', value: '01', label: '自缴' },
  { type: 'S4Y_S_PAY_TYPE', value: '02', label: '代缴' },
  { type: 'T1X_S3R_C4G_TSC_INCOME_TYPE', value: '1', label: '工资薪金所得' },
  { type: 'T1X_S3R_C4G_TSC_INCOME_TYPE', value: '2', label: '劳务报酬所得' },
  { type: 'T1X_S3R_C4G_TSC_INCOME_TYPE', value: '3', label: '非居民所得' },
  { type: 'AD_C3D_E5E_ADCE_EDUCATE_STAGE', value: '1', label: '学前教育阶段' },
  { type: 'AD_C3D_E5E_ADCE_EDUCATE_STAGE', value: '2', label: '义务教育' },
  { type: 'AD_C3D_E5E_ADCE_EDUCATE_STAGE', value: '3', label: '高中阶段教育' },
  { type: 'AD_C3D_E5E_ADCE_EDUCATE_STAGE', value: '4', label: '高等教育' },
  { type: 'AD_A3T_E5E_ADAE_EDUCATE_TYPE', value: '1', label: '技能人员职业资格' },
  { type: 'AD_A3T_E5E_ADAE_EDUCATE_TYPE', value: '2', label: '专业技术人员职业资格' },
  { type: 'AD_H3E_L2N_ADHL_CERTIFICATE_TYPE', value: '1', label: '房屋所有权证' },
  { type: 'AD_H3E_L2N_ADHL_CERTIFICATE_TYPE', value: '2', label: '不动产权证' },
  { type: 'AD_H3E_L2N_ADHL_CERTIFICATE_TYPE', value: '3', label: '房屋买卖合同' },
  { type: 'AD_H3E_L2N_ADHL_CERTIFICATE_TYPE', value: '4', label: '房屋预售合同' },
  { type: 'AD_H3E_L2N_ADHL_LOAN_TYPE', value: '1', label: '公积金贷款' },
  { type: 'AD_H3E_L2N_ADHL_LOAN_TYPE', value: '2', label: '商业贷款' },
  { type: 'AD_H3E_R2T_ADHR_LESSOR_TYPE', value: '1', label: '个人' },
  { type: 'AD_H3E_R2T_ADHR_LESSOR_TYPE', value: '2', label: '组织' },
  { type: 'AD_S5T_A2D_ADSA_TAXPAYER_TYPE', value: '1', label: '独生子女' },
  { type: 'AD_S5T_A2D_ADSA_TAXPAYER_TYPE', value: '2', label: '非独生子女' },
  { type: 'AD_S5T_A2D_ADSA_APPORTION_TYPE', value: '1', label: '平均分摊' },
  { type: 'AD_S5T_A2D_ADSA_APPORTION_TYPE', value: '2', label: '赡养人约定分摊' },
  { type: 'AD_S5T_A2D_ADSA_APPORTION_TYPE', value: '3', label: '被赡养人指定分摊' },
  { type: 'AD_S5T_A2D_ADSA_RELATION', value: '1', label: '父亲' },
  { type: 'AD_S5T_A2D_ADSA_RELATION', value: '2', label: '母亲' },
  { type: 'AD_S5T_A2D_ADSA_RELATION', value: '3', label: '其他' },
  { type: 'AD_M5L_ADM_RELATION', value: '1', label: '本人' },
  { type: 'AD_M5L_ADM_RELATION', value: '2', label: '配偶' },
  { type: 'AD_M5L_ADM_RELATION', value: '3', label: '未成年子女' },
  { type: 'S4Y_S7T_SS_FREQ', value: 'M', label: '月' },
  { type: 'S4Y_S7T_SS_FREQ', value: 'Y', label: '年' },
  { type: 'S4Y_S7T_SS_TYPE', value: '01', label: '月薪' },
  { type: 'S4Y_S7T_SS_TYPE', value: '02', label: '年终奖' },
  { type: 'S4Y_S7T_SS_PAY_TYPE', value: '01', label: '自缴' },
  { type: 'S4Y_S7T_SS_PAY_TYPE', value: '02', label: '代缴' },
  { type: 'S4Y_S7T_SS_STATUS', value: '01', label: '待处理' },
  { type: 'S4Y_S7T_SS_STATUS', value: '02', label: '打回' },
  { type: 'S4Y_S7T_SS_STATUS', value: '03', label: '待调整' },
  { type: 'S4Y_S7T_SS_STATUS', value: '04', label: '待确认' },
  { type: 'S4Y_S7T_SS_STATUS', value: '05', label: '调整待确认' },
  { type: 'S4Y_S7T_SS_STATUS', value: '06', label: '已生成' },
  { type: 'S4Y_S7T_SS_VERIFY_STATUS', value: '01', label: '待校验' },
  { type: 'S4Y_S7T_SS_VERIFY_STATUS', value: '02', label: '通过' },
  { type: 'S4Y_S7T_SS_VERIFY_STATUS', value: '03', label: '已处理' },
  { type: 'S4Y_S7T_SS_VERIFY_STATUS', value: '04', label: '预警' },
  { type: 'A8L_D4T_AD_TYPE', value: '001', label: '子女教育' },
  { type: 'A8L_D4T_AD_TYPE', value: '002', label: '继续教育' },
  { type: 'A8L_D4T_AD_TYPE', value: '003', label: '住房贷款利息' },
  { type: 'A8L_D4T_AD_TYPE', value: '004', label: '住房租金' },
  { type: 'A8L_D4T_AD_TYPE', value: '005', label: '赡养老人' },
  { type: 'A8L_D4T_AD_TYPE', value: '006', label: '大病医疗' },
  { type: 'A8L_D4T_S7T_ADS_TYPE', value: '001', label: '子女教育' },
  { type: 'A8L_D4T_S7T_ADS_TYPE', value: '002', label: '继续教育' },
  { type: 'A8L_D4T_S7T_ADS_TYPE', value: '003', label: '住房贷款利息' },
  { type: 'A8L_D4T_S7T_ADS_TYPE', value: '004', label: '住房租金' },
  { type: 'A8L_D4T_S7T_ADS_TYPE', value: '005', label: '赡养老人' },
  { type: 'A8L_D4T_S7T_ADS_TYPE', value: '006', label: '大病医疗' },
  { type: 'A8L_D4T_S7T_ADS_VERIFY_STATUS', value: '01', label: '待校验' },
  { type: 'A8L_D4T_S7T_ADS_VERIFY_STATUS', value: '02', label: '通过' },
  { type: 'A8L_D4T_S7T_ADS_VERIFY_STATUS', value: '03', label: '已处理' },
  { type: 'A8L_D4T_S7T_ADS_VERIFY_STATUS', value: '04', label: '预警' },
  { type: 'V4Y_R4T_VR_STATUS', value: '01', label: '通过' },
  { type: 'V4Y_R4T_VR_STATUS', value: '02', label: '未通过' },
  { type: 'V4Y_R4T_VR_STATUS', value: '03', label: '已处理' },
  { type: 'P5L_P_FREQ', value: 'M', label: '月' },
  { type: 'P5L_P_FREQ', value: 'Y', label: '年' },
  { type: 'P5L_P_STATUS', value: '01', label: '待处理' },
  { type: 'P5L_P_STATUS', value: '02', label: '已调整' },
  { type: 'P5L_P_STATUS', value: '03', label: '打回' },
  { type: 'P5L_P_STATUS', value: '04', label: '质疑' },
  { type: 'P5L_P_STATUS', value: '05', label: '待调整' },
  { type: 'P5L_P_STATUS', value: '06', label: '不调整' },
  { type: 'P5L_P_STATUS', value: '07', label: '已确认' },
  { type: 'P5L_P_STATUS', value: '08', label: '待发放' },
  { type: 'P5L_P_STATUS', value: '09', label: '已发放' },
  { type: 'c6r_status', value: 'ENABLED', label: '启用' },
  { type: 'c6r_status', value: 'DISABLE', label: '停用' },
  { type: 's4r_status', value: 'ONLINE', label: '在线' },
  { type: 's4r_status', value: 'MAINTAIN', label: '维护' },
  { type: 's4r_status', value: 'OFFLINE', label: '离线' },
  { type: 's12e_status', value: 'ENABLED', label: '启用' },
  { type: 's12e_status', value: 'DISABLE', label: '停用' },
  { type: 'p5e_valuationMode', value: 'UNIT', label: '单价' },
  { type: 'p5e_valuationMode', value: 'PACKAGE', label: '打包价' },
  { type: 'c5g_dimension', value: 'VALID', label: '有效的访问' },
  { type: 'c5g_dimension', value: 'INVALID', label: '无效的访问' },
  { type: 'c12s_freq', value: 'Y', label: '年' },
  { type: 'c12s_freq', value: 'M', label: '月' },
  { type: 'c12s_freq', value: 'D', label: '日' },
  { type: 'a5e_perspective', value: 'GLOBAL', label: '全局' },
  { type: 'a5e_perspective', value: 'SERVER', label: '服务' },
  { type: 'a5e_perspective', value: 'CUSTOMER', label: '客户' },
  { type: 'c15g_status', value: 'SUCCESS', label: '成功' },
  { type: 'c15g_status', value: 'PART', label: '部分完成' },
  { type: 'c15g_status', value: 'FAIL', label: '失败' },
  { type: 'c15g_status', value: 'NONE', label: '缺失' }
]

const districtList: District[] = [
  {
    value: '001',
    label: '北京市',
    children: [
      { value: '001001', label: '北京市' }
    ]
  },
  {
    value: '002',
    label: '上海市',
    children: [
      { value: '002001', label: '上海市' }
    ]
  },
  {
    value: '003',
    label: '天津市',
    children: [
      { value: '003001', label: '天津市' }
    ]
  },
  {
    value: '004',
    label: '重庆市',
    children: [
      { value: '004001', label: '重庆市' }
    ]
  },
  {
    value: '005',
    label: '陕西省',
    children: [
      { value: '005001', label: '西安' },
      { value: '005002', label: '宝鸡' },
      { value: '005003', label: '咸阳' },
      { value: '005004', label: '渭南' },
      { value: '005005', label: '铜川' },
      { value: '005006', label: '延安' },
      { value: '005007', label: '榆林' },
      { value: '005008', label: '汉中' },
      { value: '005009', label: '安康' },
      { value: '005010', label: '商洛' }
    ]
  }
]

const javaValidatorList: JavaValidator[] = [
  { clazz: 'com.such.kit.validate.validator.impl.LengthValidator', label: '数据长度校验器', paramDescrs: ['多个参数间以 , 分隔', '参数集长度等于 1 时，输入内容长度必须大于 #[1]', '参数集长度等于 2 时，输入内容长度必须介于 #[1] 到 #[2] 之间'] },
  { clazz: 'com.such.kit.validate.validator.impl.LengthRangeValidator', label: '数据长度范围校验器', paramDescrs: ['多个参数间以 , 分隔', '输入内容长度只能在范围内取值：#[1], #[2], #[3] ...'] },
  { clazz: 'com.such.kit.validate.validator.impl.DataRangeValidator', label: '数据取值范围校验器', paramDescrs: ['多个参数间以 , 分隔', '输入内容只能在范围内取值：#[1], #[2], #[3] ...'] },
  { clazz: 'com.such.kit.validate.validator.impl.MatchValidator', label: '模糊匹配校验器', paramDescrs: ['多个参数间以 , 分隔', '输入内容必须包含 #[1]'] },
  { clazz: 'com.such.kit.validate.validator.impl.UnmatchValidator', label: '模糊不匹配校验器', paramDescrs: ['多个参数间以 , 分隔', '输入内容必须不包含 #[1]'] },
  { clazz: 'com.such.kit.validate.validator.impl.EmptyValidator', label: '检查是否为空校验器', paramDescrs: ['多个参数间以 , 分隔', '输入内容非空'] },
  { clazz: 'com.such.kit.validate.validator.impl.UnemptyValidator', label: '检查是否为非空校验器', paramDescrs: ['多个参数间以 , 分隔', '输入内容为空'] },
  { clazz: 'com.such.kit.validate.validator.impl.EqValidator', label: '比较是否相等校验器', paramDescrs: ['多个参数间以 , 分隔', '输入内容必须等于 #[1]'] },
  { clazz: 'com.such.kit.validate.validator.impl.NeValidator', label: '比较是否不相等校验器', paramDescrs: ['多个参数间以 , 分隔', '输入内容必须不等于 #[1]'] },
  { clazz: 'com.such.kit.validate.validator.impl.LtValidator', label: '比较是否小于校验器', paramDescrs: ['多个参数间以 , 分隔', '输入内容必须为数字且小于 #[1]'] },
  { clazz: 'com.such.kit.validate.validator.impl.LeValidator', label: '比较是否小于等于校验器', paramDescrs: ['多个参数间以 , 分隔', '输入内容必须为数字且小于等于 #[1]'] },
  { clazz: 'com.such.kit.validate.validator.impl.GtValidator', label: '比较是否大于校验器', paramDescrs: ['多个参数间以 , 分隔', '输入内容必须为数字且大于 #[1]'] },
  { clazz: 'com.such.kit.validate.validator.impl.GeValidator', label: '比较是大于等于校验器', paramDescrs: ['多个参数间以 , 分隔', '输入内容必须为数字且大于等于 #[1]'] },
  { clazz: 'com.such.kit.validate.validator.impl.NumberValidator', label: '数字格式校验器', paramDescrs: ['多个参数间以 , 分隔', '参数集长度等于 0 时，输入内容必须为数字', '参数集长度等于 1 时，输入内容必须为数字，且整数部分长度必须大于 #[1]', '参数集长度等于 2 时，输入内容必须为数字，且整数部分长度必须介于 #[1] 和 #[2] 之间', '参数集长度等于 3 时，输入内容必须为数字，且整数部分长度必须介于 #[1] 和 #[2] 之间，小数部分长度必须等于 #[3]'] },
  { clazz: 'com.such.kit.validate.validator.impl.DateValidator', label: '日期格式校验器', paramDescrs: ['多个参数间以 , 分隔', '输入内容必须符合日期格式 #[1]'] },
  { clazz: 'com.such.kit.validate.validator.impl.RegularValidator', label: '正则校验器', paramDescrs: ['多个参数间以 , 分隔', '输入内容与正则表达式 #[1] 不匹配'] }
]

export const getDictList = (req: Request, res: Response) => {
  return res.json({
    code: 200,
    responseBody: dictList
  })
}

export const getDistrictList = (req: Request, res: Response) => {
  return res.json({
    code: 200,
    responseBody: districtList
  })
}

export const getJavaValidatorList = (req: Request, res: Response) => {
  return res.json({
    code: 200,
    responseBody: javaValidatorList
  })
}
